/* eslint-disable regexp/strict */
/* eslint-disable regexp/no-useless-assertions */
/* eslint-disable regexp/no-super-linear-backtracking */
/**
 * 正则匹配邮箱
 */
export const emailRegExp = /^[\w.%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i

/**
 * 正则匹配密码
 */
export const passwordRegExp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,30}$/

/**
 * 正则匹配验证码
 */
export const verifyCodeRegExp4 = /^\d{4}$/

/**
 * 正则匹配验证码
 */
export const verifyCodeRegExp6 = /^\d{6}$/

/**
 * 正则匹配身份证
 */
export const IDRegExp = /(^\d{15}$)|(^\d{18}$)|(^\d{17}([\dX])$)/i
/**
 * 正则匹配手机号
 */
export const mobileRegExp = /^1[3-9]\d{9}$/

/**
 * 正则匹配用户名称
 */
export const usernameRegExp
  = /^(?!-)(?!.*-$)[a-z][\w-]{1,18}[a-z0-9]$/i

/**
 * 网址(url,支持端口和"?+参数"和"#+参数)
 */
export const urlRegExp
  = /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/

/**
 * 正则匹配tag名称-以“-”开头
 */
export const tagNameHyphenRegExp = /^[^-].*/

/**
 * 正则匹配tag名称-以“refs/heads/”开头
 */
export const tagNamePrefixHeadsRegExp = /^(?!refs\/heads\/).*/

/**
 * 正则匹配tag名称-以“refs/remotes/”开头
 */
export const tagNamePrefixRemotesRegExp = /^(?!refs\/remotes\/).*/

/**
 * 正则匹配tag名称-以“./”或“.lock”结尾
 */
export const tagNameSuffixLockRegExp = /^(?!.*(?:^\.\/|\.lock)$).*$/

/**
 * 正则匹配tag名称 名称由字母、数字_.-和/组成；且/不能连续，分支名称必须以字母或数字开头，分支名称最多可以包含 200 个字符
 */
export const tagNameRegExp = /^[a-z0-9](?!.*\/\/)[\w-./]{0,199}$/i
/**
 * 正则匹配分支名称
 */
export const branchNameRegExp = /^[a-z0-9](?!.*\/\/)[\w-/]{0,199}$/i

/**
 * 正则匹配org名称
 */
export const orgNameRegExp
  = /^[a-z\d\u4E00-\u9FA5](?:[a-z\d\u4E00-\u9FA5]|(-|_)(?=[a-z\d\u4E00-\u9FA5])){0,50}$/i
/**
 * 正则匹配orgPath名称
 */
export const orgPathRegExp = /^[a-z][\w-]{1,18}[a-z0-9]$/i

/** vue-router 使用 正则匹配orgPath名称 */
export const regexpSimpleNamespacePath = '[a-zA-Z][\\w-]{0,18}[a-zA-Z0-9]'

/**
 * 正则匹配项目名称
 */
export const repoNameRegExp
  = /^[\u4E00-\u9FA5\w][\u4E00-\u9FA5\w\-.]{0,99}$/

/**
 * 正则匹配项目topic名称
 */
export const repoTopicRegExp
  = /^[\u4E00-\u9FA5\w][\u4E00-\u9FA5\w\-.]{0,49}$/

/**
 * 正则匹配项目Path名称-正则
 */
export const repoPathRegExp = /^(?!-|\.)[\w.-]{1,100}$/

/** vue-router 使用 正则匹配项目Path名称-正则 */
export const regexpSimpleRepoPath = '[\\w][\\w.-]{1,99}'

/**
 * 正则匹配项目Path名称-后缀（禁用某些结尾）
 */
export const repoPathSuffix = /^(?!.*(?:\.wiki|\.git|\.atom)$).*$/
/**
 * 正则匹配项目Path名称-全匹配（禁用某些path）
 */
export const repoPathMatch
  = /^(?!codehub$|dashboard$|users$|profile$|merge_requests$|issues$|milestones$|settings$|wiki$|home$|tree$|chart$|blob$|issues-create$|review$|release$|tags$|branches$|commits$|compare$|newmergefrom$|network$|memberlist$|labels$|setting$|files$).+/
/**
 * 正则匹配分支规则
 * 分支名称由字母、数字-_和/组成；分支名称必须以字母或数字开头和结尾，分支名称最多可以包含 200 个字符。
 */
export const branchRegex
  = /^[a-z\d](?:[a-z\d]|([\-_/])(?=[a-z\d])){0,200}$/i

/**
 * 正则匹配wiki标题（文件名）规则
 * wiki标题（文件名）由中文、字母、数字、短划线(-) 、下划线(_)和句点(.)字符
 */
export const wikiTitleReg = /^[\w\-\u4E00-\u9FA5./]*$/
